﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_LocationDistricts : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridPanelDist_LoadData();
        }
    }

    public void cbxProvinces_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                List<Province> listProv = db.Provinces.ToList<Province>();
                listProv.Sort((new SortObjectsProvinces()).Compare_ProvinceName_ASC);

                storeProvince.DataSource = listProv;
                storeProvince.DataBind();

                StoreFormUpdateDist.DataSource = listProv;
                StoreFormUpdateDist.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    public void GridPanelDist_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreDist.DataSource = db.View_Districts.ToList<View_Districts>();
                StoreDist.DataBind();

                GridPanelDist.ActiveIndex = -1;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void StoreDist_ReadData(object sender, StoreReadDataEventArgs e)
    {
        GridPanelDist_LoadData();
    }

    protected void RowSelect(object sender, Ext.Net.DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDist.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow == null)
                {
                }

                int distID = Int32.Parse(rsm.SelectedRow.RecordID);
                District dist = db.Districts.Single(d => d.DistID == distID);
                lblViewDistID.Text = dist.DistID.ToString();
                lblViewNameOfDist.Text = dist.NameOfDist;
                lblViewProName.Text = dist.Province.NameOfProvince;
                chkViewDistStatus.Visible = true;
                chkViewDistStatus.Checked = Boolean.Parse(dist.StatusDist.ToString());
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnToobarAdd_DirectClick(object sender, Ext.Net.DirectEventArgs e)
    {
        windowAddDistrict.Hidden = false;
        ResetControls_WindowAddDistrict();
    }

    protected void menuItemAddDist_DirectClick(object sender, DirectEventArgs e)
    {
        lblFormAddDistrict.Text = "";
        string proID = cbxProvinces.Value.ToString().Trim();
        if (proID.Equals(""))
        {
            lblFormAddDistrict.Text = "Bạn chưa chọn tỉnh thành";
            cbxProvinces.Focus(true, 100);
            return;
        }
        if (txtFormAddName.Text.Trim() == "")
        {
            lblFormAddDistrict.Text = "Tên quận huyện không được để trống";
            txtFormAddName.Focus(true, 100);
            return;
        }
        try
        {

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string distName = txtFormAddName.Text.Trim();
                int provID = Int32.Parse(proID);
                Province provSelected = db.Provinces.Single(p => p.ProvID == provID);

                foreach (var item in provSelected.Districts)
                {
                    if (distName.ToLower().Equals(item.NameOfDist.ToLower()))
                    {
                        lblFormAddDistrict.Text = "Tên quận huyện đã tồn tại trong huyện, hãy nhập tên khác";
                        txtFormAddName.Focus(true, 100);
                        return;
                    }
                }

                District dist = new District()
                {
                    ProvID = provID,
                    NameOfDist = txtFormAddName.Text.Trim(),
                    StatusDist = chkFormAddStatus.Checked
                };
                db.Districts.Add(dist);
                db.SaveChanges();

                GridPanelDist_LoadData();
                ResetControls_WindowAddDistrict();
                ResetControls_ViewInfor();
                X.Msg.Alert("Thông báo", "Thêm mới thành công quận huyện.").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void menuItemAddDistAndClose_DirectClick(object sender, DirectEventArgs e)
    {
        lblFormAddDistrict.Text = "";
        string proID = cbxProvinces.Value.ToString().Trim();
        if (proID.Equals(""))
        {
            lblFormAddDistrict.Text = "Bạn chưa chọn tỉnh thành";
            cbxProvinces.Focus(true, 100);
            return;
        }
        if (txtFormAddName.Text.Trim() == "")
        {
            lblFormAddDistrict.Text = "Tên quận huyện không được để trống";
            txtFormAddName.Focus(true, 100);
            return;
        }
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int provID = Int32.Parse(proID);
                string distName = txtFormAddName.Text.Trim();
                try
                {
                    District checkDist = db.Districts.Single(d => d.NameOfDist.ToLower().Equals(distName.ToLower()));
                    if (checkDist.NameOfDist.ToLower().Equals(distName.ToLower()) && checkDist.ProvID == provID)
                    {
                        lblFormAddDistrict.Text = "Trong tỉnh đã có quận huyện này, xin hãy nhập tên khác";
                        txtFormAddName.Focus(true, 100);
                        return;
                    }
                }
                catch (Exception)
                {
                }

                District dist = new District()
                {
                    ProvID = provID,
                    NameOfDist = txtFormAddName.Text.Trim(),
                    StatusDist = chkFormAddStatus.Checked
                };
                db.Districts.Add(dist);
                db.SaveChanges();
                GridPanelDist_LoadData();
                ResetControls_WindowAddDistrict();
                ResetControls_ViewInfor();
                windowAddDistrict.Hidden = true;
                X.Msg.Alert("Thông báo", "Thêm mới thành công quận huyện.").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAddCancel_DirectClick(object sender, Ext.Net.DirectEventArgs e)
    {
        windowAddDistrict.Hidden = true;
        ResetControls_WindowAddDistrict();
        cbxProvinces.Value = "";
    }

    protected void btnToobarUpdate_DirectClick(object sender, Ext.Net.DirectEventArgs e)
    {

        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDist.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow == null)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn quận huyện để cập nhật thông tin").Show();
                    return;
                }
                WindownUpdateDist.Hidden = false;
                ResetControls_WindownUpdateDist();

                int distID = Int32.Parse(rsm.SelectedRow.RecordID);
                District dist = db.Districts.Single(d => d.DistID == distID);

                cbxUpdateDistProvine.Value = dist.ProvID;
                cbxUpdateDistProvine.Disabled = true;
                txtFormUpdateDistName.Text = dist.NameOfDist;
                chkFormUpdateDistStatus.Checked = Boolean.Parse(dist.StatusDist.ToString());

            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnUpdateDist_DirectClick(object sender, DirectEventArgs e)
    {
        lblFormUpdateDist.Text = "";
        string proID = cbxUpdateDistProvine.Value.ToString().Trim();
        if (txtFormUpdateDistName.Text.Trim() == "")
        {
            lblFormUpdateDist.Text = "Tên quận huyện không được để trống";
            txtFormUpdateDistName.Focus(true, 100);
            return;
        }
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDist.SelectionModel.Primary as RowSelectionModel;

                int distID = Int32.Parse(rsm.SelectedRow.RecordID);
                District dist = db.Districts.Single(d => d.DistID == distID);

                int provID = Int32.Parse(proID);
                string distName = txtFormUpdateDistName.Text.Trim();
                try
                {
                    District checkDist = db.Districts.Single(d => d.DistID == distID);
                    Province province = db.Provinces.Single(p => p.ProvID == provID);

                    foreach (var item in province.Districts)
                    {
                        if (item.NameOfDist.ToLower().Equals(distName.ToLower()) && item.DistID != checkDist.DistID)
                        {
                            lblFormUpdateDist.Text = "Trong tỉnh đã có quận huyện này, xin hãy nhập tên khác";
                            txtFormUpdateDistName.Focus(true, 100);
                            return;
                        }
                    }
                    checkDist.NameOfDist = distName;
                    checkDist.StatusDist = Boolean.Parse(chkFormUpdateDistStatus.Checked.ToString());

                    db.SaveChanges();
                    GridPanelDist_LoadData();
                    ResetControls_WindowAddDistrict();
                    //ResetControls_ViewInfor();
                    WindownUpdateDist.Hidden = true;
                    X.Msg.Alert("Thông báo", "Cập nhật thông tin quận huyện thành công.").Show();
                }
                catch (Exception)
                {
                }

            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnCancelUpdateDist_DirectClick(object sender, DirectEventArgs e)
    {
        WindownUpdateDist.Hidden = true;
    }

    protected void btnToobarDelete_DirectClick(object sender, Ext.Net.DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDist.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow == null)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn quận huyện để xóa bỏ").Show();
                    return;
                }

                int distID = Int32.Parse(rsm.SelectedRow.RecordID);
                District dist = db.Districts.Single(d => d.DistID == distID);

                X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa quận huyện đã chọn ? [{0}]", dist.NameOfDist),
                    new MessageBoxButtonsConfig()
                    {
                        Yes = new MessageBoxButtonConfig
                        {
                            Text = "Xóa",
                            Handler = "App.direct.DoYes_DeleteDistrict();"
                        },
                        No = new MessageBoxButtonConfig
                        {
                            Text = "Hủy bỏ"
                        }
                    }).Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteDistrict()
    {
        try
        {

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDist.SelectionModel.Primary as RowSelectionModel;
                int distID = Int32.Parse(rsm.SelectedRow.RecordID);
                District dist = db.Districts.Single(d => d.DistID == distID);

                List<Commune> listComms = dist.Communes.ToList<Commune>();
                foreach (var itemComm in listComms)
                {
                    List<Organization> listOrgans = itemComm.Organizations.ToList<Organization>();
                    foreach (var itemOrgan in listOrgans)
                    {
                        List<Department> listDeparts = itemOrgan.Departments.ToList<Department>();
                        foreach (var itemDepart in listDeparts)
                        {
                            List<Employee> listEmps = itemDepart.Employees1.ToList<Employee>();
                            foreach (var itemEmp in listEmps)
                            {
                                //Xóa profile của Employee
                                List<Profily> listProfile = itemEmp.Profilies.ToList<Profily>();
                                foreach (var item in listProfile)
                                {
                                    db.Profilies.Remove(item);
                                }

                                //Xóa tất cả TranningForestings của Employee
                                List<TrainingFostering> trainList = itemEmp.TrainingFosterings.ToList<TrainingFostering>();
                                foreach (var item in trainList)
                                {
                                    db.TrainingFosterings.Remove(item);
                                }

                                //Xóa tất cả EducationsForEmps của employee
                                List<EducationsForEmp> eduList = itemEmp.EducationsForEmps.ToList<EducationsForEmp>();
                                foreach (var item in eduList)
                                {
                                    db.EducationsForEmps.Remove(item);
                                }

                                //Xóa tất cả FamilyRelationships của employee
                                List<FamilyRelationship> familyList = itemEmp.FamilyRelationships.ToList<FamilyRelationship>();
                                foreach (var item in familyList)
                                {
                                    db.FamilyRelationships.Remove(item);
                                }

                                //Xóa tất cả EmployeesSalaryLevel của employee
                                List<EmployeesSalaryLevel> salarylevalList = itemEmp.EmployeesSalaryLevels.ToList<EmployeesSalaryLevel>();
                                foreach (var item in salarylevalList)
                                {
                                    db.EmployeesSalaryLevels.Remove(item);
                                }
                                db.Employees.Remove(itemEmp);
                            }
                            db.Departments.Remove(itemDepart);
                        }
                        db.Organizations.Remove(itemOrgan);
                    }
                    db.Communes.Remove(itemComm);
                }
                db.Districts.Remove(dist);
                db.SaveChanges();

                GridPanelDist_LoadData();
                ResetControls_ViewInfor();
                X.Msg.Alert("Thông báo", "Xóa quận huyện thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }
    }

    private void ResetControls_WindowAddDistrict()
    {
        txtFormAddName.Text = "";
        lblFormAddDistrict.Text = "";
        cbxProvinces_LoadData();
        chkFormAddStatus.Checked = false;
        cbxProvinces.Value = "";
    }

    private void ResetControls_WindownUpdateDist()
    {
        txtFormUpdateDistName.Text = "";
        lblFormUpdateDist.Text = "";
        cbxUpdateDistProvine.Value = "";
        chkFormUpdateDistStatus.Checked = false;
    }

    private void ResetControls_ViewInfor()
    {
        lblViewDistID.Text = "";
        lblViewNameOfDist.Text = "";
        lblViewProName.Text = "";
        chkViewDistStatus.Visible = false;
        chkViewDistStatus.Checked = false;
    }
}